\section{Objectifs}
L'objectif de ce projet est, au travers de la construction de deux modèles, de 
mieux appréhender la structure logique de la programmation par composants,
afin de permettre à quiconque, et à partir de ces modèles, la création d'un
HADL.\\
	
	\subsection{Deux modèles : M2 et M1}
		\paragraph{\textbf{Meta-Modèle : M2}\\}
		Ce premier modèle devra représenter le niveau d'abstraction le plus haut,
		au sein de ce projet.\\
		En effet, il devra représenter les relations entre les divers concepts
		formant la structure logique de la programmation par composants.
		\paragraph{\textbf{Modèle client-serveur : M1}\\}
		Ce second modèle s'appuiera sur le premier, et, étant moins abstrait,
		il devra mettre en oeuvre les concepts du modèle M2.\\
		Pour cela, l'architecture client-serveur a été choisie.
		
	\subsection{HADL : Home Architecture Description Language}	
	Un HADL est un langage de description d'architecture qui doit permettre de décrire de manière 
	précise l'architecture logicielle d'un système, et ce afin de mieux aborder sa complexité, en donnant
	un vocabulaire commun à tous les acteurs travaillant autour d'une architecture.\\
	Avec la notion de "Home", il est ici sous-entendu que les deux modèles précédents
	devront permettre de créer notre propre ADL, devant permettre de réprésenter l'architecture 
	client-serveur, via le modèle de programmation par composant.\\
	Les propriétés suivantes permettent de définir un A.D.L. :
	\begin{itemize}
		\item{Le formalisme : doit être facilement compréhensible.}
		\item{La composition : définition d'un système avec divers niveaux d'abstraction (Ex : "Un composant est composé de composants").}
		\item{Le raffinement : possibilité de passer d'un niveau abstrait à un niveau plus détaillé.}
		\item{La gestion de l'hétérogénéité : doit pouvoir gérer des composants et des connecteurs de natures diverses, i.e. sans tenir
		compte du système, ni du langage de programmation, etc...}
		\item{Le passage à l'échelle : doit pouvoir représenter des sytèmes pouvant augmenter en complexité et taille.}
		\item{L'évolutivité : possibilité de retirer ou d'ajouter facilement des composants.}
		\item{Le dynamisme : identique à l'évolution, mais en cours d'exécution (Par exemple, sur les systèmes critiques.}
		\item{Les contraintes : définition de contraintes particulières entre composants et connecteurs.}
		\item{Les propriétés non-fonctionnelles : non-liées aux composants, ni aux connecteurs, mais à la configuration (I.e. environnement d'exécution.)}
	\end{itemize}
